/**
 * 
 */
package neptune.manager.storage;

import neptune.manager.model.cluster.Cluster;

/**
 * Questa interfaccia rappresenta uno storage per mantenere le informazioni
 * riguardanti il cluster in modo persistente. Puo' essere implementata in
 * diversi modi, in dipendenza delle scelte progettuali effettuate.
 * 
 * @author Roberto Bifulco [info@robertobifulco.it, robertobifulco.it]
 * 
 */
public interface ClusterStorage {

	public void saveCluster(Cluster cluster) throws StorageSaveException;

	public Cluster getCluster() throws StorageReadException;
	
	public String getXML(Cluster cluster) throws StorageSaveException;
	
	/**
	 * Restituisce le informazione per effettuare un collegamento SSH come utente root
	 * alla macchina con ID=idPhysicalMachine
	 * 
	 * 
	 * @param idPhysicalMachine l'id della macchina fisica
	 * @return un vettore di stringhe che contiene i seguenti elementi:
	 * [0]= root password
	 * [1]= ssh port
	 * [2]= ipAddress
	 * 
	 * @throws StorageSaveException
	 */
	public String[] getPhysicalMachineCredential(String idPhysicalMachine) throws StorageReadException;
}
